// ml:run = $bin < input
#include <bits/stdc++.h>
using namespace std;

int n, m;
int indegree[205000];
bool vis[205000];
vector<int>g[205000];
int ans[205000];

void toposort()
{
    std::priority_queue<int> q;
    for (int i = 1; i <= n; i++)
        if (!indegree[i])
            q.push(i);

    for (int ti = 1; !q.empty(); ti++) {
        int now = q.top(); q.pop();
        ans[ti] = now;
        for (int j = 0; j < (int)g[now].size(); j++) {
            int v = g[now][j];
            indegree[v]--;
            if (!indegree[v]) q.push(v);
        }
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    memset(vis, false, sizeof(vis));
    memset(indegree, 0, sizeof(indegree));
    for(int i=1;i<=n;i++)g[i].clear();
    int x, y;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d", &x, &y);
        g[y].push_back(x);
        indegree[x]++;
    }
    toposort();
    for(int i=n;i>=1;i--)
    {
        printf("%d%c", ans[i], i==1?'\n':' ');
    }
}

